package com.atguigu.springbootdemo.mapper;

import com.atguigu.springbootdemo.bean.Employee;
import com.atguigu.springbootdemo.bean.Region;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
/*
mapper:指编写了sql的文件
Mapper: Dao。数据库访问对象

一般情况下，需要接口提供一个实现类，实例化一个实现类的对象
        如果使用的是Mybatis，它提供了一种动态代理机制，可以帮你自动为接口创建实例

Mybatis提供了动态代理技术，所有使用Mybatis的Mapper接口，都可以使用这种技术来创建接口的实例

@Mapper:
        1、给开发人员看，表明这个类是一个Mapper(Dao)
        2、容器扫描到后，会自动用Mybatis的动态代理技术，在容器中创建一个单例对象
*/
@Mapper
@DS("mybatis") //当前mapper的所有的方法都使用mybatis数据源
public interface EmployeeMapper {
    //自定义访问数据的方法，自定义参数类型和返回值类型
    //CRUD
    Employee getEmployeeById(Integer id);

    //增删改都属于写操作，不需要返回值
    void insertEmployee(Employee employee);
    void updateEmployee(Employee employee);
    void deleteEmployeeById(Integer id);

    //查询所有员工
    List<Employee> getAll();

    //声明方法，访问gmall数据源+
    @DS("gmall") //当前方法需要使用gmall数据源  局部优先
    List<Region> getAllRegion();
}


//public interface EmployeeMapper {
//    //自定义访问数据的方法，自定义参数类型和返回值类型
//    //CURD
//    Employee getEmployeeById(Integer id);
//
//    //增删改都属于写操作，不需要返回值
//    void insertEmployee(Employee employee);
//    void deleteEmployee(Employee employee);
//    void updateEmployee(Employee employee);
//
//    //查询所有员工
//    List<Employee> getAll();
//}

//public interface EmployeeMapper {
//    //自定义访问数据的方法，自定义参数类型和返回值类型
//    //CURD
//    Employee getEmployeeById(Integer id);
//
//    //增删改都属于写操作，不需要返回值
//    void insertEmployee(Employee employee);
//    void deleteEmployee(Employee employee);
//    void updateEmployee(Employee employee);
//
//    //查询所有员工
//    List<Employee> getAll();
//}


//public interface EmployeeMapper {
//    //自定义访问数据的方法，自定义参数类型和返回值类型
//    //CURD
//    Employee getEmployeeById(Integer id);
//
//    //增删改都属于写操作，不需要返回值
//    void insertEmployee(Employee employee);
//    void deleteEmployee(Employee employee);
//    void updateEmployee(Employee employee);
//
//    //查询所有员工
//    List<Employee> getAll();
//}